import uma from './uma'
import React from 'react'
import Taro, { getCurrentInstance } from '@tarojs/taro'
import { Provider } from 'react-redux'
import { isSessionKey, getAuthCode, getNewSessionKey } from '@/utils/auth'
import monitor from '@/utils/alipayLogger'
import { setCMHookFunc } from '@/utils/cloudMonitorHelper'
import { _cmHookFunc } from '@/cm_hook'
import { concatUrl } from '@/utils'

import configStore from './store'
import './app.scss'
import './static/css/custom-theme.scss'
import './utils/mtj';

interface State {
  isRender: boolean
}
const store = configStore()

// 如果需要在 h5 环境中开启 React Devtools
// 取消以下注释：
// if (process.env.NODE_ENV !== 'production' && process.env.TARO_ENV === 'h5')  {
//   require('nerv-devtools')
// }

// 小程序版本更新
// 这里的是门店的地理位置和门店编码
const updateManager = Taro.getUpdateManager();
updateManager.onUpdateReady(function () {
  Taro.showModal({
    title: '更新提示',
    content: '新版本已经准备好，是否重启应用？',
    success(res) {
      if (res.confirm) {
        updateManager.applyUpdate();
      }
    }
  });
});
updateManager.onUpdateFailed(function () {
  console.error('更新小程序版本失败');
});

Taro.uma = uma

class App extends React.Component {
  $instance = getCurrentInstance();

  constructor (props) {

    super(props)
    this.state = {
      isRender: false
    }
  }
  state: State
  onLaunch(options) {
    if (process.env.TARO_ENV === 'alipay') {
      console.info('App onLaunch', options);
      monitor.init({
        pid: "xwxf7nmucob3nwddra8w1q==",
        options: options,
        sample: 1,
        autoReportApi: true,
        autoReportPage: true,
        // Http请求返回数据中状态码字段名称
        code: ['code'],
        // Http返回数据中的error message字段名称
        msg: ['message'],
        miniVersion: '0.0.26'
      });

      setCMHookFunc(_cmHookFunc);
    }
    Taro.getSystemInfo({
      success: res => {
        //导航高度
        this.taroGlobalData.NAV_HEIGHT = res.statusBarHeight + 46
        console.log('getSystemInfo-res', res)
      }, fail(err) {
        console.log(err);
      }
    })

  }

  taroGlobalData = {
    NAV_HEIGHT: 0,
    isRender: false,
    currentLocation: {}
  }

  /**
   * 指定config的类型声明为: Taro.Config
   *
   * 由于 typescript 对于 object 类型推导只能推出 Key 的基本类型
   * 对于像 navigationBarTextStyle: 'black' 这样的推导出的类型是 string
   * 提示和声明 navigationBarTextStyle: 'black' | 'white' 类型冲突, 需要显示声明类型
   */
  componentDidMount() {
    if (process.env.TARO_ENV === 'weapp') { // 微信小程序
      isSessionKey()
    } else { // 支付宝小程序
      getAuthCode()
    }

  }

  parseQueryString(url) {
    var params = {}
    var arr = url.split('&')
    var duid = url.split('duid=')
    if (duid.length > 1 && duid[1]) {
      params.duid = duid[1]
      return params
    }
    if (arr.length <= 1) {
      return params
    }

    for (var i = 0, l = arr.length; i < l; i++) {
      var a = arr[i].split('=')
      params[a[0]] = a[1]
    }
    return params
  }

  parseShareQueryString(string) {
    var params = {}
    console.log('string', string)
    if (string.indexOf('&') == -1) {
      var s = string.indexOf('s')
      var l = string.indexOf('l')
      var c = string.indexOf('c')
      var shareId = string.substring(s + 1, l)
      var superiorMobile = string.substring(l + 1, c)
      var userMobile = string.substring(c + 1)
      if (!isNaN(shareId)) params.shareId = shareId
      if (userMobile && userMobile.length == 11) params.userMobile = userMobile
      if (superiorMobile && superiorMobile.length == 11) params.superiorMobile = superiorMobile
      return params
    }
    return params

  }

  componentDidShow() {
    /** -------- 会员注册方式 --------
    * 1:自主注册
    * 2:平台推广链接
    * 3:平台合作（系统对接）
    * 4:分享注册（黑盒分享） //暂时没有场景
    * 5:分享注册（用户分享）
    * 6:集划算注册（黑盒分享）
    * 7:集划算注册（用户分享）
    * 8:扫码注册（门店码/地推码）
    * 9:股东分销
    */
    //读缓存逻辑
    // let registerData = Taro.getStorageSync('REGISTER_DATA')?JSON.parse(Taro.getStorageSync('REGISTER_DATA')):{}
    let registerData: any
    registerData = {
      storeCode: undefined,
      uInfo: undefined,
      registerType: 1
    }

    console.log('--------------------------------------enter-------------------------------------------')
    // 第三方小程序进入：全局参数 0 未知 1 集群车宝 2 车行易  CXYTL
    let data = this.$instance.router.params ? (this.$instance.router.params.referrerInfo || {}) : {}
    if (Object.keys(data).length && data.extraData && data.extraData.thirdPartySource) {
      Taro.setStorageSync('THIRD_PARTY_SOURCE', String(data.extraData.thirdPartySource))
      registerData.registerType = 2  //第三方渠道
    } else if (this.$instance.router.params && this.$instance.router.params.thirdPartySource) {
      Taro.setStorageSync('THIRD_PARTY_SOURCE', String(this.$instance.router.params.thirdPartySource))
      registerData.registerType = 2  //第三方渠道
    } else {
      Taro.removeStorageSync('THIRD_PARTY_SOURCE')
    }
    // 解决登录被挤下来的提示bug
    Taro.setStorageSync('HAS_EXPIRE', '')
    Taro.setStorageSync('SCAN_CAR_ID', '')
    Taro.setStorageSync('DISTRIBUTION_LEADER_TYPE', '')
    Taro.setStorageSync('DISTRIBUTION_SHARE_ID', '')
    Taro.setStorageSync('DISTRIBUTION_USER_MOBILE', '')
    Taro.setStorageSync('DISTRIBUTION_SUPERIOR_MOBILE', '')
    Taro.setStorageSync('DUID', '')
    Taro.setStorageSync('CHEAP_PID', '')
    Taro.setStorageSync('CHEAP_ACT', '')

    // Taro.setStorageSync('DISTRIBUTION_LEADER_ID', '')
    // 车险团长id
    console.log('this.$router.params', this.$instance.router.params)


    if (this.$instance.router.params) {
      let query = this.$instance.router.params || {}
      let { distributionLeaderId = '', scene = "", storeCode = '', linkStoreCode = '', cityCode = '', jihuasuanId = '', registerType = '', mobile = '' } = query
      if (distributionLeaderId) {
        Taro.setStorageSync('DISTRIBUTION_LEADER_ID', distributionLeaderId)
      }
      if (linkStoreCode && linkStoreCode != 'undefined') { // 推荐下单门店编码
        Taro.setStorageSync('STORECODE', linkStoreCode)
        registerData.storeCode = storeCode
        registerData.registerType = 1
      }
      if (storeCode && storeCode != 'undefined') { // 推荐下单门店编码
        Taro.setStorageSync('STORECODE', storeCode)
        registerData.storeCode = storeCode
        registerData.registerType = 1
      }
      if (mobile && mobile != 'undefined') { //普通商品分享
        registerData.registerType = 5
        registerData.uInfo = mobile
      }
      console.log('scene', scene)
      if (scene) { // 存在scene
        console.log('scene', scene)
        let sObj = this.parseQueryString(decodeURIComponent(scene))
        console.log('sObj', sObj)
        if (sObj.pId) {
          Taro.setStorageSync('CHEAP_PID', String(sObj.pId))
          registerData.registerType = 7 //集划算海报
        }
        if (sObj.act) {
          Taro.setStorageSync('CHEAP_ACT', String(sObj.act))
          registerData.registerType = 7  //集划算海报
        }
        if (sObj.thirdPartySource) {
          Taro.setStorageSync('THIRD_PARTY_SOURCE', String(sObj.thirdPartySource))
          registerData.registerType = 2  //第三方渠道
        }
        if (sObj.duid) { // 推荐下单门店编码
          Taro.setStorageSync('DUID', sObj.duid)
          registerData.uInfo = sObj.duid
          registerData.registerType = 9
        }
        if (sObj.storeCode) { // 推荐下单门店编码
          Taro.setStorageSync('STORECODE', sObj.storeCode)
          registerData.storeCode = sObj.storeCode
          if (sObj.storeQrcode) {
            registerData.registerType = 8
          }
        }
        if (sObj.dId) { // 分享团长id
          Taro.setStorageSync('DISTRIBUTION_LEADER_ID', sObj.dId)
        }
        if (sObj.te) { // 分销团长类型
          Taro.setStorageSync('DISTRIBUTION_LEADER_TYPE', sObj.te)
        }
        if (sObj.sId) { // 年卡分销活动id
          Taro.setStorageSync('DISTRIBUTION_SHARE_ID', sObj.sId)
        }
        if (sObj.um) { // 年卡分销邀请情人手机号
          Taro.setStorageSync('DISTRIBUTION_USER_MOBILE', sObj.um)
          registerData.uInfo = sObj.um
          registerData.registerType = 5
        }
        if (sObj.rId) { // 检测报告ID
          Taro.setStorageSync('CHECK_REPORT_ID', sObj.rId)
        }
        let shareObj = this.parseShareQueryString(decodeURIComponent(scene))
        console.log('shareObj', shareObj)
        if (shareObj.shareId) { // 年卡分销活动id
          Taro.setStorageSync('DISTRIBUTION_SHARE_ID', shareObj.shareId)
        }
        if (shareObj.userMobile) { // 年卡分销邀请情人手机号
          Taro.setStorageSync('DISTRIBUTION_USER_MOBILE', shareObj.userMobile)
          registerData.uInfo = shareObj.userMobile
          registerData.registerType = 5
        }
        if (shareObj.superiorMobile) { // 年卡分销邀请情人上级手机号
          Taro.setStorageSync('DISTRIBUTION_SUPERIOR_MOBILE', shareObj.superiorMobile)
        }
      }
      /** -------- 会员注册方式 --------
       * 1:自主注册
       * 2:平台推广链接
       * 3:平台合作（系统对接）
       * 4:分享注册（黑盒分享）
       * 5:分享注册（用户分享）
       * 6:集划算注册（黑盒分享）
       * 7:集划算注册（用户分享）
       * 8:扫码注册（门店码/地推码/建档扫码）
       * 9:股东分销
       */
      //集划算
      if (jihuasuanId) {
        registerData.registerType = 7 //集划算注册（用户分享）
        let { pMobile, pUnionId } = query
        if (pUnionId || pMobile) registerData.uInfo = pMobile || pUnionId
        // if (storeCode) {
        //   registerData.storeCode = storeCode
        //   registerData.registerType = 6 //集划算注册（黑盒分享）
        // }
      }
      if (registerType) {
        registerData.registerType = registerType //以链接参数为主
      }
      Taro.setStorageSync('REGISTER_DATA', JSON.stringify(registerData))
    }


    // 友商自行上报openId
    let openid = Taro.getStorageSync('IS_OPENID')
    if (openid && process.env.TARO_ENV === 'weapp') {
      Taro.uma.setOpenid(openid)
    }

    // if (process.env.TARO_ENV === 'weapp' && wx.getPrivacySetting) {
    // 		wx.getPrivacySetting({
    // 			success: res => {
    // 				console.log(res) // 返回结果为: res = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' }
    // 				console.log('res',res)
    // 				if (res.needAuthorization) {
    // 					//获取当前路径保存，隐私协议页
    // 					const pages = Taro.getCurrentPages()
    // 					const route = pages[pages.length - 1].route
    // 					const query = pages[pages.length - 1].options
    // 					console.log('pages', pages)
    // 					console.log(concatUrl(route, query))
    // 					console.log('route', route)
    // 					console.log('query', query)
    // 						Taro.setStorageSync('BACK_ROUTE', concatUrl(route, query))
    // 						getNewSessionKey().then(() => { // 跳转过去的必须登录login拿到sessionKey，确保在登录的时候，不会sessionKey过期
    // 							Taro.redirectTo({
    // 								url: '/pages/authorization/index/index'
    // 							})
    // 						})

    // 				}
    // 			},
    // 			fail: () => {},
    // 			complete: () => {}
    // 		})

    // }
  }

  componentDidHide() {
  }


  componentDidCatchError() { }

  render() {
    return <Provider store={store}>{this.props.children}</Provider>

  }
}

export default App;
